`
https://leetcode.cn/problems/check-completeness-of-a-binary-tree/
`

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isCompleteTree = function (root) {
  const q = [];
  q.push(root);
  // 遍历完所有非空节点时变成 true
  let end = false;
  // while 循环控制从上向下一层层遍历
  while (q.length > 0) {
    let sz = q.length;
    // for 循环控制每一层从左向右遍历
    for (let i = 0; i < sz; i++) {
      let cur = q.shift();
      if (cur === null) {
        // 第一次遇到 null 时 end 变成 true
        // 如果之后的所有节点都是 null，则说明是完全二叉树
        end = true;
      } else {
        if (end) {
          // end 为 true 时遇到非空节点说明不是完全二叉树
          return false;
        }
        // 将下一层节点放入队列，不用判断是否非空
        q.push(cur.left);
        q.push(cur.right);
      }
    }
  }
  return true;
};